import { getDataType } from '.'

/**
 * 判断值是否为空
 * @param value 值
 * @param loose 松散校验
 * @return 布尔值 [true 空 | false 非空]
 */
export const isEmpty = (value: any, loose: boolean = false) => {
  const dataType = getDataType(value)
  if (loose) {
    if (['undefined', 'null'].includes(dataType)) {
      return true
    }
  } else {
    if (['undefined', 'null'].includes(dataType)) {
      return true
    } else if (['string', 'array'].includes(dataType) && value.length === 0) {
      return true
    } else if (['object'].includes(dataType) && Object.keys(value).length === 0) {
      return true
    }
  }
  return false
}

/**
 * 判断值是否为非空
 * @param value 值
 * @param loose 松散校验
 * @return 布尔值 [true 非空 | false 空]
 */
export const isNotEmpty = (value: any, loose: boolean = false) => {
  return !isEmpty(value, loose)
}

/**
 * 是否为有效的 url
 * @param url url
 * @return 布尔值 [true 是 | false 不是]
 */
export const isValidURL = (url: string) => {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

/**
 * 是否为外部的 url
 * @param url url
 * @return 布尔值 [true 是 | false 不是]
 */
export const isExternalURL = (url: string) => {
  const reg = /^(https?:|mailto:|tel:)/
  return reg.test(url)
}
